package com.itheima.tlias84.utils;

import com.alibaba.fastjson.JSONObject;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import java.util.Date;

public class JwtUtil {

    private static final String SIG = "77b3b103-a7cf-4c87-ab6f-42ae9687a539";
    private JwtUtil(){}

    /**
     * 生成token
     * @param username payload -用户名
     * @param password payload - 密码
     * @param minutes token过期时间， 以分钟为单位
     * @return
     */
    public static String generateToken(String username,String password,long minutes){
        //1构建jwt对象
        //2指定header对象（一般省略）
        //3放置payload，以及过期时间和生成时间
        Date now = new Date();
        //4进行数字签名
        //5生成token
        String token = Jwts.builder().claim("username", username).claim("password", password).issuedAt(now).
                expiration(new Date(now.getTime() + 60 * 1000 * minutes)).
                signWith(Keys.hmacShaKeyFor(SIG.getBytes()), Jwts.SIG.HS256).compact();
        return token;
    }

    /**
     * 验证token
     * @param token 返回payload中的信息
     * @return
     */

    public static JSONObject verifyToken(String token){
        //1.构建解析对象
        //2.指定数字签名
        //3.指定被签名后的token
        JwtParser parser = Jwts.parser().verifyWith(Keys.hmacShaKeyFor(SIG.getBytes())).build();
        Claims payload = parser.parseSignedClaims(token).getPayload();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("username",payload.get("username"));
        jsonObject.put("password",payload.get("password"));
        //还没完成 token失效的处理 还有token字符串不合法的处理
        return jsonObject;
    }
}
